package com.ihr360.payroll.model.dto.attendance.report;

import com.ihr360.authority.sharing.entityhandler.UserResourceHandler;
import com.ihr360.payroll.model.dto.salary.embeddable.StaffInfoSnapshot;
import com.ihr360.shared.entitywithlistener.NumberIdWithTimeAndCompanyId;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.Index;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.util.Date;

/**
 * 实际出勤天数（天）
 * 应出勤天数（天）
 * 法定计薪天数（天）
 * 月计薪天数（天）
 * 平日加班小时-标准（小时）
 * 周末加班小时-标准（小时）
 * 节假日加班小时-标准（小时）
 * 工作日加班累计（小时）
 * 休息日加班累计（小时）
 * 节假日加班累计（小时）
 * 扣薪病假时长（小时）
 * 全薪病假时长（小时）
 * 事假时长（小时）
 * 产假时长（小时）
 * 工时调整-综合（小时）
 * 节假日加班小时-综合（小时）
 * 月工作日工时-综合（小时）
 * 季工作日工时-综合（小时）
 * 年工作日工时-综合（小时）
 * 年假时长（小时）
 * 调休时长（小时）
 * 迟到次数（次数）
 * 早退次数（次数）
 *  签到遗漏次数（次数）
 *  签退遗漏次数（次数）
 *  累计迟到分钟数（分钟）
 *  累计早退分钟数（分钟）
 *  缺勤次数（次数）
 * */
@Entity
@Table(indexes = @Index(name = "companyId_staffId_index", columnList = "companyId, staffId"))
@EntityListeners(value = {UserResourceHandler.class})
public class AttendanceBill extends NumberIdWithTimeAndCompanyId<Long> {
    @Embedded
    private StaffInfoSnapshot staffInfo;
    private int year;
    private int month;
    /**
     * 日期
     */
    @Column(columnDefinition = "date")
    private Date reportDate;

    /**
     * 考勤项类型
     */
    @Column(length = 40)
    private String reportType;

    /**
     * 考勤数据
     */
    private Double item;

    /**
     * 申请事由
     */
    private String remark;

    /**
     * 申请时间
     */
    @Column(columnDefinition = "date")
    private Date applyDate;

    /**
     * 薪资方案id
     * */
    @Column(nullable = false)
    private Long salaryPlanId;

    /**
     * 考勤汇总
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(nullable = false)
    private AttendanceMonthlyReport monthlyReport;

    public AttendanceMonthlyReport getMonthlyReport() {
        return monthlyReport;
    }

    public void setMonthlyReport(AttendanceMonthlyReport monthlyReport) {
        this.monthlyReport = monthlyReport;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Date getApplyDate() {
        return applyDate;
    }

    public void setApplyDate(Date applyDate) {
        this.applyDate = applyDate;
    }

    public void setStaffInfo(StaffInfoSnapshot staffInfo) {
        this.staffInfo = staffInfo;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public Date getReportDate() {
        return reportDate;
    }

    public void setReportDate(Date reportDate) {
        this.reportDate = reportDate;
    }

    public StaffInfoSnapshot getStaffInfo() {
        return staffInfo;
    }

    public String getReportType() {
        return reportType;
    }

    public void setReportType(String reportType) {
        this.reportType = reportType;
    }

    public Double getItem() {
        return item;
    }

    public void setItem(Double item) {
        this.item = item;
    }

    public Long getSalaryPlanId() {
        return salaryPlanId;
    }

    public void setSalaryPlanId(Long salaryPlanId) {
        this.salaryPlanId = salaryPlanId;
    }
}